<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 实例化是浅拷贝


    // function Teacher() {
    //   this.name = 'Mr.li';
    //   this.tSkill = 'JAVA';
    // }
    // Teacher.prototype = {
    //   pSkill: 'JS/JQ'
    // }
    // var t = new Teacher();
    // console.log(t)

    // function Student() {
    //   this.name = 'Mr.ming';
    // }

    // function Buffer() { }
    // Buffer.prototype = Teacher.prototype
    // Student.prototype = new Buffer();
    // // 学生继承了老师
    // // Student.prototype = t;
    // // 再增加自己的原型方法时，确更改了老师的实例
    // Student.prototype.age = 18;
    // var s = new Student();
    // console.log(s)




    // function Person() { }
    // Person.prototype.dance = function () {
    //   console.log('Person----dance')
    // }
    // function Ninja() { }
    // Ninja.prototype = new Person();
    // const ninja = new Ninja();
    // console.log(ninja.__proto__);
    // console.log(ninja.dance);
    // ninja.__proto__ = {};
    // console.log(ninja.__proto__); // __proto__也会被重写掉
    // console.log(ninja.dance);
    // console.log(ninja.constructor) // 会丢失本身的构造函数
    // console.log(ninja instanceof Ninja);
    // console.log(ninja instanceof Person);
    // console.log(ninja instanceof Object)
    // // 手动设置构造函数
    // Object.defineProperty(ninja, 'constructor', {
    //   configurable: false,
    //   enumerable: false,
    //   value: Ninja,
    //   writable: true
    // })
    // console.log(ninja.constructor)



    // function Fruits() { }
    // Fruits.prototype.eat = 'good';
    // function Apple() { }
    // Apple.prototype = new Fruits();
    // Apple.prototype.wash = 'haha';
    // const fruits = new Fruits();
    // const apply = new Apple();
    // console.log(fruits)
    // console.log(apply)
    // console.log(Fruits.__proto__)
    // console.log(Fruits.prototype)

    // 不要随便改__proto__。他是构造函数的prototype浅拷贝来的，
    // 更改会影响原构造函数
    // const obj = {};
    // obj.__proto__.aaa = 999;
    // console.log({})
    // console.log(Object.prototype)

    // 重点
    // function Person() { }
    // const me = new Person();
    // const you = new Person();
    // me.__proto__.ccc = 999;
    // console.log(Person.prototype);
    // console.log(me);
    // console.log(you);
  </script>
</body>

</html>